Fix 'insert-directory' in Turkish language-environment
authorEli Zaretskii <eliz@gnu.org>
Wed, 25 Jun 2025 16:17:59 +0000 (12:17 -0400)
committerEli Zaretskii <eliz@gnu.org>
Wed, 25 Jun 2025 16:17:59 +0000 (12:17 -0400)
* lisp/files.el (insert-directory-clean, insert-directory): Use
case-sensitive search for "//DIRED//" and similar strings.
(Bug#78894)

lisp/files.el

index 3828bf38d99a380e998d5363f0654a5d0f6ac3b3..c288a5a8b265f5ba4b3aa4b984b1afb46c6de00a 100644 (file)
@@ -8160,10 +8160,14 @@ Valid wildcards are `*', `?', `[abc]' and `[a-z]'."
     ;; "//DIRED-OPTIONS//" line, but no "//DIRED//" line.
     ;; We take care of that case later.
     (forward-line -2)
-    (when (looking-at "//SUBDIRED//")
+    ;; We reset case-fold-search here and elsewhere, because
+    ;; case-insensitive search for strings with uppercase 'I' will fail
+    ;; in language environments (such as Turkish) where 'I' downcases to
+    ;; 'ı', not to 'i'.
+    (when (let ((case-fold-search nil)) (looking-at "//SUBDIRED//"))
       (delete-region (point) (progn (forward-line 1) (point)))
       (forward-line -1))
-    (if (looking-at "//DIRED//")
+    (if (let ((case-fold-search nil)) (looking-at "//DIRED//"))
        (let ((end (line-end-position))
              (linebeg (point))
              error-lines)
@@ -8200,7 +8204,7 @@ Valid wildcards are `*', `?', `[abc]' and `[a-z]'."
       ;; "//DIRED-OPTIONS//"-line, but no "//DIRED//"-line
       ;; and we went one line too far back (see above).
       (forward-line 1))
-    (if (looking-at "//DIRED-OPTIONS//")
+    (if (let ((case-fold-search nil)) (looking-at "//DIRED-OPTIONS//"))
        (delete-region (point) (progn (forward-line 1) (point))))))
 
 ;; insert-directory
@@ -8342,11 +8346,12 @@ normally equivalent short `-D' option is just passed on to
                  (string-match "--dired\\>" switches)
                (member "--dired" switches))
          (save-excursion
-           (forward-line -2)
-           (when (looking-at "//SUBDIRED//")
-             (forward-line -1))
-           (if (looking-at "//DIRED//")
-               (setq result 0))))
+            (let ((case-fold-search nil))
+             (forward-line -2)
+             (when (looking-at "//SUBDIRED//")
+               (forward-line -1))
+             (if (looking-at "//DIRED//")
+                 (setq result 0)))))
 
        (when (and (not (eq 0 result))
                   (eq insert-directory-ls-version 'unknown))